package com.apobates.forum.toro.tuple;

import org.apache.commons.lang3.tuple.Pair;
import java.util.function.Consumer;
import java.util.function.Function;

/**
 * Pair实例最终结果处理函数
 * @param <L> 左对象类型
 * @param <R> 右对象类型
 * @param <F> 最终结果类型
 * @since 20220827
 * @author xiaofanku@live.cn
 */
public interface PairResultMapperTransfer<L, R, F> {
    /**
     * 消费函数/前置处理
     * @return
     */
    Consumer<Pair<L, R>> getConsumer();

    /**
     * 映射函数/后置转换
     * @return
     */
    Function<Pair<L, R>, F> getFormater();

    /**
     * 处理单实例结果
     * @param result 实例结果
     * @return
     */
    default F get(Pair<L, R> result) {
        Pair<L,R> cloneIns = Pair.of(result.getLeft(), result.getRight());
        getConsumer().accept(cloneIns);
        return getFormater().apply(cloneIns);
    }

}
